package cn.ike.service.system.impl;

import cn.ike.dao.system.UserDao;
import cn.ike.domain.system.Dept;
import cn.ike.domain.system.User;
import cn.ike.service.system.UserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

@Service
public class UserServiceImpl implements UserService {

    // 注入UserDao
    @Autowired
    private UserDao userDao;

    /**
     * 分页查询
     * @param companyId 企业id
     * @param pageNum 当前页码
     * @param pageSize 页面大小
     * @return
     */
    @Override
    public PageInfo<User> findPage(String companyId, Integer pageNum, Integer pageSize) {
        // 设置分页插件的参数
        PageHelper.startPage(pageNum, pageSize);
        // 调用dao
        List<User> userList = userDao.findAll(companyId);
        return new PageInfo<>(userList);
    }

    /**
     * 查询所有部门
     * @param companyId
     */
    @Override
    public List<User> findAll(String companyId) {
        return userDao.findAll(companyId);
    }

    /**
     * 保存用户
     * @param user
     */
    @Override
    public void save(User user) {
        // 设置用户id
        user.setId(UUID.randomUUID().toString());
        // 用户密码 加密、加盐
        Md5Hash md5Hash = new Md5Hash(user.getPassword(),user.getEmail());
        user.setPassword(md5Hash.toString());
        // 调用userdao
        userDao.save(user);
    }

    /**
     * 更新用户
     * @param user
     */
    @Override
    public void update(User user) {
        // 用户密码 加密、加盐
        Md5Hash md5Hash = new Md5Hash(user.getPassword(),user.getEmail());
        user.setPassword(md5Hash.toString());
        userDao.update(user);
    }

    /**
     * 删除用户
     * @param userId
     */
    @Override
    public boolean delete(String userId) {
        Long userRoleByUserId = userDao.findUserRoleByUserId(userId);
        if (userRoleByUserId == 0){
            // 沒有外鍵关联
            userDao.delete(userId);
            return true;
        }
        return false;
    }

    /**
     * 根据id查询用户
     * @param userId
     */
    @Override
    public User findById(String userId) {
        return userDao.findById(userId);
    }

    /**
     * 保存用户角色
     *
     * @param userId
     * @param roleIds
     */
    @Override
    public void updateUserRole(String userId, String[] roleIds) {
        // 根据用户id先删除用户的角色
        userDao.deleteUserRole(userId);
        // 遍历用户选中的角色id 给用户添加角色
        for (String roleId : roleIds) {
            userDao.saveUserRole(userId, roleId);
        }
    }

    /**
     * 根据邮箱查询用户
     * @param email
     * @return
     */
    @Override
    public User findByEmail(String email) {
        return userDao.findByEmail(email);
    }
}
